package com.eleme.dbutil;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Dbutil {
	//加载的驱动程序类（这个类就在我们导入的jar包中）
	private static final String DRIVER="com.mysql.jdbc.Driver";
	//数据库连接地址
	private static final String URL="jdbc:mysql://127.0.0.1:3306/eleme";
	//用户名
	private static final String USERNAME="root";
	//密码
	private static final String PASSWORD="ok";
	 //调用DriverManager对象的getConnection()方法，获得一个Connection对象
	private static Connection conn;
	private Dbutil(){}
	//方法：查询操作
	static{
		try {
			 //调用Class.forName()方法加载驱动程序
			Class.forName(DRIVER);
			conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);
		} catch (ClassNotFoundException e) {
			System.out.println("找不到MySQL驱动!");
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("获取连接失败");
		}	
	}
	//用于执行已发送的预编译的sql 并返回执行成功的记录的条数 int
	public static int update(String sql,Object[]params){
		int count=0;
		try {
			//创建PreparedStatement对象：1、代码的可读性和可维护性 2、PreparedStatement可以尽最大可能提高性能 3、最重要的一点是极大地提高了安全性
			//用prepareStatement 有预编译功能可以防止sql注入攻击
			PreparedStatement pstat = conn.prepareStatement(sql);
			if (params != null && params.length != 0) {
				for (int i = 0; i < params.length; i++) {
					pstat.setObject(i + 1, params[i]);
				}
			}
			count = pstat.executeUpdate();
		} catch (Exception e) {
			
		}
		return count;
	}
	//数据库查询语句
	public static ResultSet query(String sql,Object[]params){
		ResultSet rs=null;
		try {
			//创建PreparedStatement对象：1、代码的可读性和可维护性 2、PreparedStatement可以尽最大可能提高性能 3、最重要的一点是极大地提高了安全性
			PreparedStatement pstat = conn.prepareStatement(sql);
			if (params != null && params.length != 0) {
				for (int i = 0; i < params.length; i++) {
					pstat.setObject(i + 1, params[i]);
				}
			}
			//执行查询并返回结果集
			rs = pstat.executeQuery();
		} catch (Exception e) {
		}
		return rs;
	}
}
